//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, January 20, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using System.Collections.Generic; using System; using TableConfig; namespace Snxxz.UI { [XLua.LuaCallCSharp] public class RealmBetterEquipModel : Model, IBeforePlayerDataInitialize, ISwitchAccount,IPlayerLoginOk { PlayerPackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } PackModelInterface modelInterface { get { return ModelCenter.Instance.GetModel(); } } public string currentEquipGuid { get; private set; } Dictionary betterEquipModels = new Dictionary(); public event Action showEquipRefreshEvent; public const string RealmRecordKey = "RealmRecord"; public override void Init() { playerPack.RefreshPackAct += OnPackageRefresh; playerPack.RefreshItemCountAct += OnPackageItemRefresh; } public override void UnInit() {; playerPack.RefreshPackAct -= OnPackageRefresh; playerPack.RefreshItemCountAct -= OnPackageItemRefresh; } public void OnBeforePlayerDataInitialize() { PlayerDatas.Instance.PlayerDataRefreshInfoEvent -= RefreshRealm; currentEquipGuid = string.Empty; betterEquipModels.Clear(); } public void OnPlayerLoginOk() { LocalSave.SetInt(RealmRecordKey,PlayerDatas.Instance.baseData.realmLevel); PlayerDatas.Instance.PlayerDataRefreshInfoEvent += RefreshRealm; } public void OnSwitchAccount() { currentEquipGuid = string.Empty; } private void RefreshRealm(PlayerDataRefresh type) { int realmLv = PlayerDatas.Instance.baseData.realmLevel; if (type != PlayerDataRefresh.OfficialRank || LocalSave.GetInt(RealmRecordKey) == realmLv || NewBieCenter.Instance.inGuiding) { return; } LocalSave.SetInt(RealmRecordKey,realmLv); Dictionary pairs = modelInterface.CheckBetterEquipByRealm(); betterEquipModels.Clear(); currentEquipGuid = string.Empty; foreach (var model in pairs.Values) { betterEquipModels[model.itemInfo.ItemGUID] = model; currentEquipGuid = model.itemInfo.ItemGUID; } if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } public bool TryGetBetterEquip(string _guid, out ItemModel _equip) { return betterEquipModels.TryGetValue(_guid, out _equip); } public void ReportConfirmBetterEquip(string _guid) { betterEquipModels.Remove(_guid); var tempGuid = GetOneEquip(); if (tempGuid != currentEquipGuid) { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } private void OnPackageRefresh(PackType _packType) { if (_packType != PackType.rptItem) { return; } var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var guid = keys[i]; var itemModel = playerPack.GetItemModelByGUID(guid); if (itemModel == null || itemModel.packType != PackType.rptItem) { betterEquipModels.Remove(guid); } } var tempGuid = GetOneEquip(); if (tempGuid != currentEquipGuid) { if (!string.IsNullOrEmpty(tempGuid)) { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } else { currentEquipGuid = tempGuid; if (showEquipRefreshEvent != null) { showEquipRefreshEvent(); } } } } private void OnPackageItemRefresh(PackType _packType, int _index, int _itemId) { if (_packType == PackType.rptEquip) { //穿上装备的时候的处理 var item = playerPack.GetItemModelByIndex(_packType, _index); if (item != null) { RemoveLowGradeItemByEquipPlace(_index, item.equipScore); } OnPackageRefresh(PackType.rptItem); } else if (_packType == PackType.rptItem) { OnPackageRefresh(_packType); } } private string GetOneEquip() { var guid = string.Empty; foreach (var key in betterEquipModels.Keys) { guid = key; break; } return guid; } private void RemoveItemByEquipPlace(int _place) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place) { betterEquipModels.Remove(keys[i]); } } } private void RemoveLowGradeItemByEquipPlace(int _place, int _score) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place && item.equipScore <= _score) { betterEquipModels.Remove(keys[i]); } } } private bool TryGetEquipByPlace(int _place, out ItemModel _itemModel) { var place = _place == 10 ? 9 : _place; var keys = new List(betterEquipModels.Keys); for (int i = keys.Count - 1; i >= 0; i--) { var item = betterEquipModels[keys[i]]; if (item != null && item.chinItemModel.EquipPlace == place) { _itemModel = item; return true; } } _itemModel = null; return false; } } }